package acm.蓝桥24;

import java.util.Scanner;

/**
 * 思路： 如果数组中存在1，那么操作的次数，就是非1的个数。 如果不存在1，那就构建1 ，操作次数为构建1的次数+n-1
 * 
 * 构建1的次数是先从1位置到n位置求一次gcd。
 * 
 */
public class E_公约数的次数 {

	static int n;
	static int[] src;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		src = new int[n + 1];
		int cnt = 0;
		for (int i = 1; i <= n; i++) {
			src[i] = sc.nextInt();
			if (src[i] == 1) {
				cnt++;
			}
		}
		if (cnt != 0) {
			System.out.println(n - cnt);
		} else {
			int ans=fun();
			System.out.println(ans);
		}
	}

	public static int fun() {
		int ans = Integer.MAX_VALUE;
		for (int i = 1; i <= n; i++) {
			int gcd = src[i];
			int len = 0;
			for (int j = i + 1; j <= n; j++) {
				gcd = gcd(gcd, src[j]);
				if (gcd == 1) {
					len=j-i;
					break;
				}
			}
			if(gcd==1) {
				ans=Math.min(ans, len+n-1);
			}
		}
		return ans==Integer.MAX_VALUE?-1:ans;
	}

	public static int gcd(int a, int b) {
		return b == 0 ? a : gcd(b, a % b);
	}
}
